/*
 * @Author: Liang Huimin
 * @LastEditors: Liang Huimin
 * @email: lhm@cxehr.com
 * @Date: 2024-06-05 02:43:35
 * @LastEditTime: 2024-06-05 16:22:17
 * @motto: Still water run deep
 * @Description: Modify here please
 * @FilePath: \deploy-cli-service\lib\utils\index.js
 */
const fs = require('fs')
const ora = require('ora')
const chalk = require('chalk')
const { deployConfigPath,serverConfigPath } = require('../config')

module.exports = {
  /**
   * 检查部署配置文件是否存在
   * @returns {boolean}
   */
  checkDeployConfigExists: () => {
    return fs.existsSync(deployConfigPath)
  },
  /**
   * 检查部署配置文件是否存在
   * @returns {boolean}
   */
  checkServerConfigExists: () => {
    return fs.existsSync(serverConfigPath)
  },
  /**
   * 日志信息
   * @param {string} 信息内容
   */
  log: (message) => {
    console.log(message)
  },
  /**
   * 成功信息
   * @param  {...any} 信息内容
   */
  succeed: (...message) => {
    ora().succeed(chalk.greenBright.bold(message))
  },
  /**
   * 提示信息
   * @param  {...any} 信息内容
   */
  info: (...message) => {
    ora().info(chalk.blueBright.bold(message))
  },
  /**
   * 错误信息
   * @param  {...any} 信息内容
   */
  error: (...message) => {
    ora().fail(chalk.redBright.bold(message))
  },
  /**
   * 下划线重点信息
   * @param {*} 信息内容
   * @returns
   */
  underline: (message) => {
    return chalk.underline.blueBright.bold(message)
  },
  /**
   *获取一个文件夹路径下所有文件的list
   *
   * @param {string} dirPath 文件夹路径
   * @returns [filepath1,filepath2]
   */
  getFilesListByDir(dirPath) {
    const jsonFiles = []
    function findJsonFile(path) {
      let files = fs.readdirSync(path)
      files.forEach(function (item, index) {
        let fPath = join(path, item)
        let stat = fs.statSync(fPath)
        if (stat.isDirectory() === true) {
          // jsonFiles.push(fPath);
          findJsonFile(fPath)
        }
        if (stat.isFile() === true) {
          jsonFiles.push(fPath)
        }
      })
    }

    if (fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory()) {
      findJsonFile(dirPath)
    } else {
      throw '错误：路径不是文件夹: ' + dirPath
    }
    return jsonFiles
    // console.log(jsonFiles);
  },

  /**
   *获取一个文件夹路径下所有文件夹list
   *
   * @param {string} dirPath 文件夹路径
   * @returns [filepath1,filepath2]
   */
  getDirListByDir(dirPath) {
    const jsonFiles = []
    function findJsonFile(path) {
      let files = fs.readdirSync(path)
      files.forEach(function (item, index) {
        let fPath = join(path, item)
        let stat = fs.statSync(fPath)
        if (stat.isDirectory() === true) {
          jsonFiles.push(fPath)
          findJsonFile(fPath)
        }
        // if (stat.isFile() === true) {
        // 	jsonFiles.push(fPath);
        // }
      })
    }

    if (fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory()) {
      findJsonFile(dirPath)
    } else {
      throw '错误：路径不是文件夹'
    }
    return jsonFiles
    // console.log(jsonFiles);
  },

  /**
   *
   *删除一个目录，包含其下的文件和子文件夹
   *
   * @param {*} p 要操作的文件夹dir path
   * @param {boolean} [isDelDir=true] 是否要删除根文件夹，默认true
   */
  delDir(p, isDelDir = true) {
    if (fs.existsSync(p)) {
      //如果路径正确
      var list = fs.readdirSync(p) //获取该目录下资源列表
      list.forEach((v, i) => {
        //遍历该资源列表
        var path = p + '/' + v //拼接新的路径
        var stats = fs.statSync(path) //获取每一个资源的信息
        if (stats.isFile()) {
          //如果是文件  删除
          fs.unlinkSync(path)
        } else {
          //如果是目录  调用自己
          delDir(path, true)
        }
      })
      if (isDelDir) {
        fs.rmdirSync(p) //删除空目录
      }
    } else {
      log('file 91:', '删除一个目录函数：参数不是一个存在的目录', p)
    }
  },

  mkdirs(dirpath) {
    if (!fs.existsSync(dirname(dirpath))) {
      mkdirs(dirname(dirpath))
    }
    fs.mkdirSync(dirpath)
  },
  sleep(time) {
    return new Promise((resolve, reject) => {
      if (typeof time !== 'number') {
        reject()
      } else {
        setTimeout(() => {
          resolve()
        }, time)
      }
    })
  }
}
